#from selenium import webdriver
from seleniumwire import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from webdriver_manager.chrome import ChromeDriverManager
from fake_useragent import UserAgent

from pyvirtualdisplay import Display


class Browser:

    """ Класс представляющий браузер """

    def get_browser(self, display_browser, proxy=None):

        """ Настроить и получить браузер """

        user_agent = UserAgent()
        user_agent = user_agent.random
        driver = ChromeDriverManager().install()

        display = Display(visible=1, size=(1600, 902))  # Это
        display.start()                                 # Это

        options = webdriver.ChromeOptions()
        options.add_argument('--disable-extensions')         # Это
        options.add_argument('--profile-directory=Default')  # Это
        options.add_argument("--incognito")                  # Это
        options.add_argument("--disable-plugins-discovery")  # Это

        options.add_argument(f'--user-agent={user_agent}')
        options.add_argument(f'--disable-blink-features=AutomationControlled')

        if not display_browser == 'yes':  # Если браузер не нужно отображать

            options.add_argument('--headless')

        if proxy:  # Если собираемся парсить через прокси

           browser =  self.get_browser_with_proxy(user_agent, driver, options, proxy)

           return browser

        else:  # Если не собираемся парсить через прокси

            browser = webdriver.Chrome(
                driver,
                options=options
            )

            browser.delete_all_cookies()      # Это
            browser.set_window_size(800,800)  # Это
            browser.set_window_position(0,0)  # Это

            return browser


    def get_browser_with_proxy(self, user_agent, driver, options, proxy):

        """ Возвращаем браузер с прокси """

        data = proxy.split(':')
        ip = data[0]
        port = data[1]
        login = data[2]
        password = data[3]

        print(f'http://{login}:{password}@{ip}:{port}')

        proxy_options = {
            'proxy': {
                'https': f'http://{login}:{password}@{ip}:{port}'
            }
        }

#        caps = DesiredCapabilities.CHROME
#        caps['marrionette'] = True
#
#        caps['proxy'] = {
#            'proxyType': 'MANUAL',
#            'httpProxy': proxy,
#            'ftpProxy': proxy,
#            'sslProxy': proxy
#        }
#        desired_capabilities=caps

        browser = webdriver.Chrome(
            driver,
            seleniumwire_options=proxy_options
        )

        return browser
